Generic Locking In C++ - Andrei Alexandrescu